package com.accompany.controller;

import com.accompany.common.Result;
import com.accompany.entity.MasterTag;
import com.accompany.service.MasterTagService;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * <p>
 * 大神-标签关联表 前端控制器
 * </p>
 *
 * @author DC
 * @since 2024-12-26
 */
@RestController
@RequestMapping("/master-tag")
@Tag(name = "MasterTagController", description = "大神-标签关联管理")
public class MasterTagController {

    @Autowired
    private MasterTagService masterTagService;

    /**
     * 创建大神-标签关联
     *
     * @param masterTag 大神-标签关联信息
     * @return Result对象，包含操作结果
     */
    @PostMapping("/create")
    @Operation(summary = "创建大神-标签关联", description = "创建一个新的大神-标签关联")
    @ApiResponses(value = {
            @ApiResponse(responseCode = "200", description = "大神-标签关联创建成功"),
            @ApiResponse(responseCode = "400", description = "请求参数不正确")
    })
    public Result<?> createMasterTag(@RequestBody MasterTag masterTag) {
        masterTagService.createMasterTag(masterTag);
        return Result.success();
    }

    /**
     * 删除大神-标签关联
     *
     * @param id 大神-标签关联ID
     * @return Result对象，包含操作结果
     */
    @DeleteMapping("/delete/{id}")
    @Operation(summary = "删除大神-标签关联", description = "根据大神-标签关联ID删除大神-标签关联")
    @ApiResponses(value = {
            @ApiResponse(responseCode = "200", description = "大神-标签关联删除成功"),
            @ApiResponse(responseCode = "404", description = "大神-标签关联不存在")
    })
    public Result<?> deleteMasterTag(@PathVariable Long id) {
        masterTagService.deleteMasterTag(id);
        return Result.success("删除成功");
    }

    /**
     * 更新大神-标签关联信息
     *
     * @param masterTag 大神-标签关联信息
     * @return Result对象，包含操作结果
     */
    @PutMapping("/update")
    @Operation(summary = "更新大神-标签关联信息", description = "根据大神-标签关联ID更新大神-标签关联信息")
    @ApiResponses(value = {
            @ApiResponse(responseCode = "200", description = "大神-标签关联信息更新成功"),
            @ApiResponse(responseCode = "404", description = "大神-标签关联不存在")
    })
    public Result<?> updateMasterTag(@RequestBody MasterTag masterTag) {
        masterTagService.updateMasterTag(masterTag);
        return Result.success("更新成功");
    }

    /**
     * 获取单个大神-标签关联信息
     *
     * @param id 大神-标签关联ID
     * @return Result对象，包含大神-标签关联信息
     */
    @GetMapping("/{id}")
    @Operation(summary = "获取单个大神-标签关联信息", description = "根据大神-标签关联ID获取大神-标签关联信息")
    @ApiResponses(value = {
            @ApiResponse(responseCode = "200", description = "获取成功"),
            @ApiResponse(responseCode = "404", description = "大神-标签关联不存在")
    })
    public Result<MasterTag> getMasterTagById(@PathVariable Long id) {
        MasterTag masterTag = masterTagService.getMasterTagById(id);
        return Result.success(masterTag);
    }

    /**
     * 获取所有大神-标签关联列表
     *
     * @return Result对象，包含大神-标签关联列表
     */
    @GetMapping
    @Operation(summary = "获取所有大神-标签关联列表", description = "获取所有大神-标签关联的列表")
    @ApiResponses(value = {
            @ApiResponse(responseCode = "200", description = "获取成功"),
            @ApiResponse(responseCode = "500", description = "服务器内部错误")
    })
    public Result<List<MasterTag>> getAllMasterTags() {
        List<MasterTag> masterTags = masterTagService.getAllMasterTags();
        return Result.success(masterTags);
    }

    /**
     * 分页查询大神-标签关联列表
     *
     * @param page  页码
     * @param size  每页大小
     * @return Result对象，包含分页后的大神-标签关联列表
     */
    @GetMapping("/page")
    @Operation(summary = "分页查询大神-标签关联列表", description = "根据页码和每页大小分页查询大神-标签关联列表")
    @ApiResponses(value = {
            @ApiResponse(responseCode = "200", description = "分页查询成功"),
            @ApiResponse(responseCode = "500", description = "服务器内部错误")
    })
    public Result<Page<MasterTag>> getPaginatedMasterTags(
            @Parameter(description = "页码", required = true) @RequestParam(name = "page", defaultValue = "1") Integer page,
            @Parameter(description = "每页大小", required = true) @RequestParam(name = "size", defaultValue = "10") Integer size) {
        Page<MasterTag> pageResult = masterTagService.getPaginatedMasterTags(page, size);
        return Result.success(pageResult);
    }
}